// @Author : zaniu(zzaniu@126.com)
// @Time   : 2021/9/6 21:43
// @Desc   :
//
//                   _ooOoo_
//                  o8888888o
//                  88" . "88
//                  (| -_- |)
//                  O\  =  /O
//               ____/`---'\____
//             .'  \\|     |//  `.
//            /  \\|||  :  |||//  \
//           /  _||||| -:- |||||-  \
//           |   | \\\  -  /// |   |
//           | \_|  ''\---/''  |   |
//           \  .-\__  `-`  ___/-. /
//         ___`. .'  /--.--\  `. . __
//      ."" '<  `.___\_<|>_/___.'  >'"".
//     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//     \  \ `-.   \_ __\ /__ _/   .-` /  /
// =====`-.____`-.___\_____/___.-`____.-'=====
//                   `=---='
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//           佛祖保佑       永无BUG
//
package conf

import (
	"errors"
	"math/rand"
	"sync"
	"time"
)

type RpcServerInfo struct {
	Ip   string
	Port uint64
}

var (
	GlobalUserServices      []RpcServerInfo
	GlobalOrderServices     []RpcServerInfo
	GlobalInventoryServices []RpcServerInfo
	RWLock                  sync.RWMutex
)

// 后续再实现负载均衡吧，现在先简单搞一下。或许可以直接用 Nacos 的负载均衡
func GetOneRpcServerInfo(GlobalServices []RpcServerInfo) (RpcServerInfo, error) {
	RWLock.RLock()
	defer RWLock.RUnlock()
	if len(GlobalServices) == 0 {
		return RpcServerInfo{}, errors.New("无可用服务")
	}
	rand.Seed(time.Now().UnixNano())
	return GlobalServices[rand.Intn(len(GlobalServices))], nil
}
